package com.vates.vsp.entidades;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Reserva implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long idReserva;

	private int cantidad;

	@Temporal(TemporalType.DATE)
	private Date fechaIni;

	@Temporal(TemporalType.DATE)
	private Date fechaFin;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idCliente", nullable = false)
	private Cliente cliente;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idTipoHab", nullable = false)
	private TipoHabitacion tipoHabitacion;
	
	public Reserva() {
	}

	public Reserva(int cantidad, Date fechaIni, Date fechaFin, Cliente cliente,
			TipoHabitacion tipoHabitacion) {
		this.cantidad = cantidad;
		this.fechaFin = fechaFin;
		this.fechaIni = fechaIni;
		this.cliente = cliente;
		this.tipoHabitacion = tipoHabitacion;
	}

	public Reserva(int cantidad, Date fechaIni, Date fechaFin, Cliente cliente) {
		this.cantidad = cantidad;
		this.fechaIni = fechaIni;
		this.fechaFin = fechaFin;
		this.cliente = cliente;
	}

	public Long getIdReserva() {
		return this.idReserva;
	}

	public void setIdReserva(Long idReserva) {
		this.idReserva = idReserva;
	}

	public int getCantidad() {
		return this.cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public Date getFechaFin() {
		return this.fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public Date getFechaIni() {
		return this.fechaIni;
	}

	public void setFechaIni(Date fechaIni) {
		this.fechaIni = fechaIni;
	}

	public Cliente getCliente() {
		return this.cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public TipoHabitacion getTipoHabitacion() {
		return this.tipoHabitacion;
	}

	public void setTipoHabitacion(TipoHabitacion tipoHabitacion) {
		this.tipoHabitacion = tipoHabitacion;
	}

	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof Reserva))
			return false;

		Reserva otro = (Reserva) obj;

		if (idReserva.equals(otro.idReserva))
			return true;
		else
			return false;
	}

	@Override
	public String toString() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		return "Id: " + idReserva + "\nCantidad: " + cantidad
				+ "\nFecha Inicio: " + sdf.format(fechaIni) + "\nFecha Fin: "
				+ sdf.format(fechaFin) + "\nCliente: " + cliente.getNombre()
				+ "\nHotel: " + tipoHabitacion.getHotel().getNombre()
				+ "\nTipo Habitacion: " + tipoHabitacion.getNombre();
	}

}